//package com.example.tool.conf;
//
//import cn.hutool.core.util.ObjectUtil;
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.example.tool.bean.business.WarehouseExpressDeliveryConfig;
//import com.example.tool.bean.business.wdt.SelfOrderDO;
//import com.example.tool.bean.business.wechat.SpreadSheetGetSheetPropertiesItem;
//import com.example.tool.bean.business.wechat.SpreadSheetGetSheetPropertiesResponse;
//import com.example.tool.service.RedisService;
//import com.example.tool.service.selforder.SelfOrderService;
//import com.example.tool.util.DDUtil;
//import com.example.tool.util.ExpressDeliveryUtil.ExpressDeliveryResult;
//import com.example.tool.util.ExpressDeliveryUtil.ExpressDeliveryTrack;
//import com.example.tool.util.ExpressDeliveryUtil.ExpressDeliveryUtil;
//import com.example.tool.util.WeChatUtil;
//import com.google.common.collect.Lists;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.Collections;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.Objects;
//import java.util.concurrent.TimeUnit;
//import java.util.stream.Collectors;
//
//import static com.example.tool.util.ExpressDeliveryUtil.ExpressDeliveryUtil.JT;
//import static com.example.tool.util.ExpressDeliveryUtil.ExpressDeliveryUtil.UNKNOWN;
//import static com.example.tool.util.ExpressDeliveryUtil.ExpressDeliveryUtil.YTO;
//import static com.example.tool.util.ExpressDeliveryUtil.ExpressDeliveryUtil.YUN_DA;
//import static com.example.tool.util.ExpressDeliveryUtil.ExpressDeliveryUtil.ZTO;
//import static com.example.tool.util.ExpressDeliveryUtil.ExpressDeliveryUtil.hasExcessiveTimeGaps;
//import static com.example.tool.util.ExpressDeliveryUtil.ExpressDeliveryUtil.judgeExpressDeliveryType;
//import static com.example.tool.util.ExpressDeliveryUtil.TrackTypeEnum.SIGNED;
//import static com.example.tool.util.WeChatUtil.batchUpdateSpreadsheet;
//import static com.example.tool.util.WeChatUtil.createAddSheetRequest;
//import static com.example.tool.util.WeChatUtil.createUpdateSheetRequest;
//import static com.example.tool.util.WeChatUtil.getDocumentShareUrl;
//import static com.example.tool.util.WeChatUtil.spreadSheetGetSheetProperties;
//
///**
// * 物流异常统计
// */
//@Component
//public class OrderLogisticsAbnormalityCollectTasks {
//    @Autowired
//    private RedisService redisService;
//    @Autowired
//    private  SelfOrderService selfOrderService;
//    private static final String ddLinkUrl="https://alidocs.dingtalk.com/i/nodes/%s";
//    private static final String qwLinkUrl="https://doc.weixin.qq.com/smartsheet/%s";
////    private static final String qwLinkUrl="https://doc.weixin.qq.com/sheet/%s";
//    private static final String rangeDropShipAddressTemplate="A%s:D%s";
//    private static final String rangeShippedAddressTemplate="A%s:C%s";
//    private static final String keyTemplate="sys:orderLogisticAWorkbookId:%s:%s";
//    //已审核未发货
//    private  List<Integer>findDropshippingStatus=Arrays.asList(16,19,20,21,23,24,25,27,30,35,40);
//    //已发货
//    private  List<Integer>findShippedStatus=Arrays.asList(95,96,101,110);
//    //代发货和已发货
//    private  List<Integer>allFindShippedStatus=Arrays.asList(16,19,20,21,23,24,25,27,30,35,40,55,95,96,101,110);
//    private static final  Integer readBatchSize=3000;
//    private static final  Integer diffInHoursT=16;
//    private static final  Integer updateBatchSize=3000;
//    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//    private static final SimpleDateFormat sdfYYYYMMdd = new SimpleDateFormat("yyyy-MM-dd");
//    private static final SimpleDateFormat sdfYYYYMM = new SimpleDateFormat("yyyy-MM");
//    //保存时间值
//    private static final Integer dataSaveDays=7;
//    //保存时间的单位
//    private static final TimeUnit timeUnit = TimeUnit.DAYS;
//    //常温
//    private static final  String roomTemperatureType="1";
//    //冻品
//    private static final  String frozenProductsType="2";
//    private static HashMap<String, List<WarehouseExpressDeliveryConfig>> WAREHOUSE_INTERCEPT_CONFIG=new HashMap<>();
//    static {
//        WAREHOUSE_INTERCEPT_CONFIG.put("CNHC",//苍南-龙港（常温仓）
//        Arrays.asList(new WarehouseExpressDeliveryConfig(//龙港仓（常温）快递售后群（申通）
//        ExpressDeliveryUtil.STO,
//        1,
//        "P7QG4Yx2Jp3NaeblUY510mZAV9dEq3XD",
//        "SEC3530451e3910a9de749c955ab402b2a23d029da3aff72b0e91944f4ffea29901",
//        "3be4f4c7c52fed6d3438909cc938ac19d2a79ecc40a09563318b87cd03752b73",null,null)
//        ,new WarehouseExpressDeliveryConfig(//龙港中通
//        ExpressDeliveryUtil.ZTO,
//        2,
//        "dcz8t-8w8MVEkPKcbJ8WTbjzwBtlYwA1jquiE9SMEaWHscWUcuXxPGjMaCNUvX3qBIp2OiGCumpGPw9GkB3KJqvA",
//        "testchat123",
//        "",null,null)
//        , new WarehouseExpressDeliveryConfig(//龙港极兔
//        JT,
//        2,
//        "dcL9WC1IIOpw-M875Yt48AzQ1-eAxcFUAHzbWtJsVJJfyyY98EUhlajG0QEiGF7mcyCHr1T8XHdGYr_sns02Pc0A",
//        "JGJTGroupChat",
//        "",null,null)
//        ));
//
//
//        WAREHOUSE_INTERCEPT_CONFIG.put("cqztc-01",//重庆-中通（冻品仓）
//        Arrays.asList(new WarehouseExpressDeliveryConfig(//重庆仓（冻品）快递售后群
//        UNKNOWN,
//        1,
//        "MNDoBb60VL9ObMEPFrNKoPd6JlemrZQ3",
//        "SEC96bf424e75957b1940ade52514036b1facbd09eafd5ca7edbf1fbbcc471a89c6",
//        "933590ef48062a42b7906a8fd876b7782df3910c47a23534f31ac16ec88dc735",null,null))
//        );
//
//            WAREHOUSE_INTERCEPT_CONFIG.put("233565416",//广州-江高（常温仓）
//            Arrays.asList(new WarehouseExpressDeliveryConfig(//江高仓（常温）快递售后群（圆通）
//            YTO,
//            1,
//                "gvNG4YZ7JnbMzLR5UynEvgmjJ2LD0oRE",
//                "SECda76372127b3a91fc2d76aed4872c7caa3c31028352c7e9876c48797ba5d1ad1",
//                "f45c82911719da8d29fc5164b4c2588e51e0d68b278d116b4fbd8cb2dc63fa50",null,null)
//              ,new WarehouseExpressDeliveryConfig(//江高中通快递对接
//            ZTO,
//            2,
//            "dcGTJVolmozTJA2u7zWvohUSwPD-Ezh8sfraw3LIyVw9AhKyWz1BxHIsjIn87tUQWcWENS8X_2sZqSJdouAjKZFQ",
//            "JGZTGroupChat",
//                       "",null,null)
//            ,new WarehouseExpressDeliveryConfig(//忆北江高极兔
//            JT,
//            2,
//            "dcAJXOohnrPQ5QflfssiLkTa8BifXb9wuJ2ORUs7aBCWqIP0a0jnka4IdJbg8xzIJMIgjxjUnGjkU_wOi2plimeA",
//            "JTJGGroupChat",
//                      "",null,null)
//            ,new WarehouseExpressDeliveryConfig(//江高 广东 韵达
//            YUN_DA,
//            2,
//            "dcaI3GfL6UyqAHQQLDBwYQaBDB06-AOCrZ_Bo48WqKWHJbTNwwteHM0fDszI9RSfXxsoGDFAToJaXUYH-oGZpHxg",
//            "GZYDGroupChat",
//                       "",null,null)
//            ));
//
//            WAREHOUSE_INTERCEPT_CONFIG.put("WH0000076",//合肥-肥西（冻品仓）
//            Collections.singletonList(new WarehouseExpressDeliveryConfig(//台肥仓（冻品）快递售后群（统一）
//                        UNKNOWN,
//                        1,
//            "ZgpG2NdyVXaOEALjT3EyD0mMJMwvDqPk",
//            "SEC5e61e55f743d8952cba699be732e43eaf7bdd12da0b559c9591454f7b76bcd67",
//            "dd6f2fe2186a84b85852025680db4ad2573240bb9481c12f9cf3f8802a0af44e",null,null)
//            ));
//
//            WAREHOUSE_INTERCEPT_CONFIG.put("HFGXC02",//济南-天泽（冻品仓）
//                Arrays.asList( new WarehouseExpressDeliveryConfig(//天泽仓（冻品）快递售后群（统一）
//                        ExpressDeliveryUtil.UNKNOWN,
//                        1,
//            "oP0MALyR8kb9XAmOUE7ZBA5kJ3bzYmDO",
//            "SEC213971c59ea21362ab08113d632268a413aabbeb3c40de9f79b64be019d5c4a0",
//            "49014cfc32833bf3e1bf99ada174ec3ce018f1aee533ef1e7b2a21f82e803e0b",null,null))
//            );
//
//
//
//            WAREHOUSE_INTERCEPT_CONFIG.put("SHC",//上海-上海（冻品仓）
//                Arrays.asList( new WarehouseExpressDeliveryConfig(//上海仓（冻品）快递售后群
//                        ExpressDeliveryUtil.UNKNOWN,
//                        1,
//            "P7QG4Yx2Jp3NaeblUY51AaMyV9dEq3XD",
//            "SECc3abcdd288e118ab8fb5058446575207c4ac39b7d790aca3fdd91d0af533ee14",
//            "907e7b99a154cd1b93e6b5eee12bd1752c273ab36b76087d64964494245210a4",null,null))
//            );
//
//
//            WAREHOUSE_INTERCEPT_CONFIG.put("gzdxc001",//广州-德信（冻品仓）
//                Arrays.asList( new WarehouseExpressDeliveryConfig(//德信仓（冻品）快递售后群
//                        ExpressDeliveryUtil.UNKNOWN,
//                        1,
//            "7NkDwLng8ZK3GnEkTjYekZvqWKMEvZBY",
//            "SEC02533e52d5bf330638e1158784ef3fa150cfde8ac2e385e3d8adff522f0d820e",
//            "99e098e1c67bfb7693156757a7a56f1d856f37df91b58dc0ff496347a19d6ef1",null,null))
//            );
//
//            WAREHOUSE_INTERCEPT_CONFIG.put("jxsrcxc01",//江西-南昌（常温仓）
//            Arrays.asList(new WarehouseExpressDeliveryConfig(//江西仓（常温）快递售后群（圆通)
//                        ExpressDeliveryUtil.YTO,
//                        1,
//            "ZX6GRezwJlyDpZnPIny6npYn8dqbropQ",
//            "SEC56b4084a06e60b05406b4a49ddb660e46061c21ab2282694305436c567351cb9",
//            "87bf9ed52b5c60b6a340aa5cfc7c260875cf1b15a542429fe660062d2cf72bcb",null,null),
//                new WarehouseExpressDeliveryConfig(//江西仓（常温）快递售后群（中通）
//                        ZTO,
//                        1,
//            "dpYLaezmVNgO3NE5iZXggMg2JrMqPxX6",
//            "SECb2eb67a58fea92969487daa296a9536063fb35faa743df99c09d344bc1a86873",
//            "c18019d56f6c24f4a9ff6ded03e67823c63d1e8adff761ed6e01152461e7bfd9",null,null))
//            );
//
//            WAREHOUSE_INTERCEPT_CONFIG.put("csztdpc01",//长沙-中通（冻品仓）
//                Collections.singletonList(new WarehouseExpressDeliveryConfig(//长沙仓（冻品）快递售后群（统一）
//                        UNKNOWN,
//                        1,
//            "qnYMoO1rWxbl3KAjUKMdzMarJ47Z3je9",
//            "SEC098707457239ad8f5644fed315bb2de2f8c2f711820a2fd08f48651295f8bfdd",
//            "ecdb4ce675945a909f87f8e266065ebf1f8d3e6d1ff0557a563657f46c44852d",null,null))
//            );
//
//            WAREHOUSE_INTERCEPT_CONFIG.put("hunan001",//湖南-长沙（常温仓）
//            Collections.singletonList(new WarehouseExpressDeliveryConfig(//长沙仓（常温）快递售后群（统一）
//            UNKNOWN,
//            1,
//            "Qnp9zOoBVBezpxbnFG45Pwd9W1DK0g6l",
//            "SEC1e32020d251b1ce7fa59cef98f8ac79386f990ebc4196d60d34bd5e7f3d90008",
//            "d82616b734a61bcfc6aae27b6bd5bcb70330b47f24210375b6185cd01818736d",null,null))
//            );
//
//
//            WAREHOUSE_INTERCEPT_CONFIG.put("yiwu01",//浙江-义乌（常温仓）
//                Collections.singletonList(new WarehouseExpressDeliveryConfig(//义乌仓 （常温）快递售后群（统一）
//                        UNKNOWN,
//                        1,
//                        "XPwkYGxZV3yXoPMvIE0yNDZ58AgozOKL",//正式
//                        "SECc3f3b364885974c38e832e8a7651845a81422f7e79e97e1979fc66916b0eff02",
//                        "3429beb9ba26135ed6193d0db68732c641e16d3edd6bd65dd779b16dc9a8eca9",null,null))
//            );
//
//            WAREHOUSE_INTERCEPT_CONFIG.put("SYC",//沈阳-天泽（冻品仓）
//            Collections.singletonList(new WarehouseExpressDeliveryConfig(//沈阳仓（冻品）审单对接群
//            UNKNOWN,
//            1,
//            "YndMj49yWjmvkeaxi0GMqAMr83pmz5aA",
//            "SECacba4eed59b688fd3e4f7eff889923b1b4aa639a19d84d5b6f7b351a9a591d34",
//            "17254730ade1d35fda71e320b77df73d6a082e055251675514395ee16f4de859",null,null))
//            );
//
//    }
//
//
//
//
////    @Scheduled(cron = "0 0 9,17 * * ?", zone = "Asia/Shanghai")
//    public  void disposeScheduledTasks() {
//        String sheetId=sdfYYYYMM.format(new Date());
//        int currentHour = LocalDateTime.now().getHour();
//        if(!Arrays.asList(9,17).contains(currentHour)){
//            return;
//        }
//        /**
//         *
//         * 早上 9点 下午 17点
//         * 查询出来已发货的  物流异常提醒
//         */
//        List<SelfOrderDO>timeoutOrders=findTimeoutOrders();
//        orderHandle(timeoutOrders,sheetId);
//
//
//    }
//
//
//    private  void orderHandle(List<SelfOrderDO> timeoutOrders,String sheetId){
//        Map<String,List<SelfOrderDO>>WAREHOUSE_NO_ITEM=timeoutOrders.stream().filter(w->StringUtils.isNotBlank(w.getWarehouseNo())).collect(Collectors.groupingBy(SelfOrderDO::getWarehouseNo));
//        Date date = new Date();
//        List<SelfOrderDO> updateItems = new ArrayList<>();
//        for(String warehouseNo:WAREHOUSE_NO_ITEM.keySet()){
//            List<SelfOrderDO> selfOrderDOS = WAREHOUSE_NO_ITEM.get(warehouseNo);
//            Map<String,List<SelfOrderDO>>LOGISTICS_TYPE_ITEMS=selfOrderDOS.stream().collect(Collectors.groupingBy(e -> judgeExpressDeliveryType(e.getLogisticsNo())));
//            System.out.println("LOGISTICS_TYPE_ITEMS："+LOGISTICS_TYPE_ITEMS);
//            List<WarehouseExpressDeliveryConfig>warehouseExpressDeliveryConfig = WAREHOUSE_INTERCEPT_CONFIG.get(warehouseNo);
//            System.out.println("warehouseExpressDeliveryConfig："+warehouseExpressDeliveryConfig);
//            Map<String, WarehouseExpressDeliveryConfig>EXPRESS_DELIVERY_TYPE_ITEM=warehouseExpressDeliveryConfig.stream().collect(Collectors.toMap(WarehouseExpressDeliveryConfig::getExpressDeliveryType,e->e));
//            System.out.println("EXPRESS_DELIVERY_TYPE_ITEM："+EXPRESS_DELIVERY_TYPE_ITEM);
//            if(EXPRESS_DELIVERY_TYPE_ITEM.containsKey(UNKNOWN)){//部分快递仅一个仓库
//                List<SelfOrderDO> allOrders = LOGISTICS_TYPE_ITEMS.values()
//                        .stream()
//                        .flatMap(List::stream)
//                        .collect(Collectors.toList());
//                LOGISTICS_TYPE_ITEMS=new HashMap<String,List<SelfOrderDO>>();
//                LOGISTICS_TYPE_ITEMS.put(UNKNOWN,allOrders);
//            }
//
////            WarehouseInterceptionConfig libraryInterceptionConfig = warehouseExpressDeliveryConfig.get()
////            if (!selfOrderDOS.isEmpty()){
////                List<List<String>> values = selfOrderDOS.stream().filter(o -> ExpressDeliveryUtil.queryLogistics(o.getLogisticsNo()).getTracks().isEmpty()).map(o ->
////                        Arrays.asList(o.getTradeNo(), o.getSrcTids(),dateToStr(o.getEstimateConsignTime()), "未发货")).collect(Collectors.toList());
////                if(!values.isEmpty()){
////                    List<String> headerValues = Arrays.asList("订单编号", "原始单号", "最晚发货时间", "处理类型");
////                    getDocumentReviewUpdates(libraryInterceptionConfig,values,sheetId,rangeDropShipAddressTemplate,headerValues);
////                }
////            }
//
//            for(String key:EXPRESS_DELIVERY_TYPE_ITEM.keySet()){//已发货
//                WarehouseExpressDeliveryConfig warehouseExpressDeliveryConfigs=EXPRESS_DELIVERY_TYPE_ITEM.get(key);
//                List<SelfOrderDO>typeOrders=LOGISTICS_TYPE_ITEMS.get(key);
//                if(ObjectUtil.isNotNull(typeOrders)&&!typeOrders.isEmpty()){
//                    //订单编号,原始单号,物流单号,最晚发货时间,发货时间
//                    List<List<String>> values = typeOrders.stream().filter(o -> {
//                    ExpressDeliveryResult result = ExpressDeliveryUtil.queryLogistics(o.getLogisticsNo());
//                    if(!result.getSucceed()){
//                        return false;
//                    }
//                    List<ExpressDeliveryTrack> tracks = result.getTracks();
//                    Date consignTime = o.getConsignTime();
//                    if(tracks.stream().anyMatch(e -> ObjectUtil.equal(e.getScanType(), SIGNED.getCode()))){
//                        updateItems.add(o);
//                    }
//                    if(tracks.isEmpty()){
//                    long diffInMilliseconds = Math.abs(date.getTime() - consignTime.getTime());
//                    long diffInHours = diffInMilliseconds / (1000 * 60 * 60);
//                    if(diffInHours>=diffInHoursT){
//                        return true;
//                    }
//
//                    }else{
//                        return hasExcessiveTimeGaps(tracks, date);
//                    }
//                    return false;}).map(o ->
//                    Arrays.asList(o.getTradeNo(), o.getStockoutNo(),o.getSrcTids(), o.getLogisticsNo(), dateToStr(o.getEstimateConsignTime()))).collect(Collectors.toList());
//                    if(!values.isEmpty()){
//                    List<String> headerValues = Arrays.asList("订单编号","出库单号", "原始单号", "物流单号","最晚发货时间");
//                    getSendOrderUpdates(warehouseExpressDeliveryConfigs,values,sheetId,rangeShippedAddressTemplate,headerValues);
//                    }
//                }
//            }
//
//
//        }
//
//    }
//
//
//
//
//
//    /**
//     *
//     * @param orders
//     */
//    private void updateOrInsertItems(List<SelfOrderDO>orders){
//         for(SelfOrderDO order:orders){
//             updateOrInsertItem(order);
//         }
//    }
//    private void updateOrInsertItem(SelfOrderDO data){
//        selfOrderService.updateById(data);
//    }
//
//    public static Date toDate(String dateStr) {
//        if(StringUtils.isBlank(dateStr)){
//            return null;
//        }
//        sdf.setLenient(false); // 严格模式（禁止自动转换，如 "2023-02-30" 会报错）
//        try {
//            return sdf.parse(dateStr);
//        } catch (ParseException e) {
//           return new Date(Long.parseLong(dateStr));
//        }
//    }
//    public static String dateToStr(Date date) {
//        if(ObjectUtil.isNull(date)){
//            return null;
//        }
//        return sdf.format(date);
//    }
//
//    /**
//     */
//    public  List<SelfOrderDO> findTimeoutOrders(){
//        QueryWrapper<SelfOrderDO> estimateConsignTime = new QueryWrapper<SelfOrderDO>().in("trade_status",findShippedStatus).eq("sign_flag",false).orderByDesc("estimate_consign_time");
//        return selfOrderService.list(estimateConsignTime);
//    }
//
//
//    /**
//     * 获取两个LocalDateTime之间的所有整天时间字符串
//     * @param startDateTime 开始时间（可为null）
//     * @param endDateTime 结束时间（可为null）
//     * @return 时间字符串列表，格式为"yyyy-MM-dd HH:mm:ss"
//     */
//    public static List<String> getDailyTimeStrings(LocalDateTime startDateTime, LocalDateTime endDateTime) {
//        List<String> result = new ArrayList<>();
//        // 处理null情况
//        if (startDateTime == null || endDateTime == null) {
//            return result;
//        }
//        // 确保开始时间不晚于结束时间
//        if (startDateTime.isAfter(endDateTime)) {
//            return result;
//        }
//        // 检查是否为整点时间（分钟和秒都为0）
//        boolean isStartWholeHour = isWholeHour(startDateTime);
//        boolean isEndWholeHour = isWholeHour(endDateTime);
//
//        // 处理开始时间（如果不是整点，直接添加）
//        if (!isStartWholeHour) {
//            result.add(startDateTime.format(FORMATTER));
//        }
//
//        // 计算第一个整点时间
//        LocalDateTime current = startDateTime
//                .withMinute(0)
//                .withSecond(0)
//                .withNano(0);
//
//        if (isStartWholeHour) {
//            current = startDateTime;
//        } else {
//            current = current.plusHours(1);
//        }
//        // 添加所有中间的整点时间
//        while (!current.isAfter(endDateTime)) {
//            // 只有当当前时间小于结束时间，或者等于结束时间且结束时间是整点时才添加
//            if (current.isBefore(endDateTime) || (current.equals(endDateTime) && isEndWholeHour)) {
//                result.add(current.format(FORMATTER));
//            }
//            current = current.plusHours(1);
//        }
//        // 处理结束时间（如果不是整点且未被添加过）
//        if (!isEndWholeHour && !endDateTime.equals(startDateTime)) {
//            result.add(endDateTime.format(FORMATTER));
//        }
//        return result;
//    }
//
//    /**
//     * 判断时间是否为整点（分钟和秒都为0）
//     */
//    private static boolean isWholeHour(LocalDateTime dateTime) {
//        return dateTime.getMinute() == 0 && dateTime.getSecond() == 0;
//    }
//
//    /**
//     *     * 获取上次更新的下标
//     *      * String workbookId="Obva6QBXJw6lYwAMFlr3arwxVn4qY5Pr";
//     *      * String sheetId="s1";
//     *      * @param rangeAddressKey
//     * @param rangeAddressKey
//     * @param workbookId
//     * @param sheetId
//     * @return
//     */
//    public Integer ddOptimizeTable(String rangeAddressKey,String workbookId,String sheetId,String rangeAddressTemplate,List<String>headerValues) {
//        String currentSubscriptStr = redisService.getString(rangeAddressKey);
//        Integer currentSubscript=1;
//        if (StringUtils.isBlank(currentSubscriptStr)){
//            List<String>findSheets= DDUtil.getSheets(workbookId).getJSONArray("value").stream().map(val->{
//                JSONObject vm=(JSONObject)val;return vm.getString("name");}).filter(name->name.equals(sheetId)).collect(Collectors.toList());
//            if(!findSheets.isEmpty()){
//                Integer startIndex=currentSubscript;
//                Integer endIndex=startIndex+readBatchSize;
//                currentSubscript=0;
//                for (int i = 0; i <100; i++) {
//                    String rangeAddress=String.format(rangeAddressTemplate,startIndex,endIndex);
//                    JSONObject rsData=JSONObject.parseObject(DDUtil.readSheets(workbookId,sheetId,rangeAddress));
//                    long rssData=rsData.getJSONArray("values").stream().map(v->(List<Object>)v).filter(v->StringUtils.isNotBlank(v.get(0).toString())).count();
//                    currentSubscript= Math.toIntExact(currentSubscript + rssData );
//                    if(rssData==0){break;}
//                    startIndex=endIndex+1;
//                    endIndex=endIndex+readBatchSize;
//                }
//                redisService.setWithExpire(rangeAddressKey,currentSubscript.toString(),dataSaveDays,timeUnit);
//            }else{
//                DDUtil.createSheets(workbookId,sheetId);
//                String rangeAddress=String.format(rangeAddressTemplate,currentSubscript,currentSubscript);
//                DDUtil.updateRange(workbookId,sheetId,rangeAddress, Collections.singletonList(headerValues));
//                redisService.setWithExpire(rangeAddressKey,currentSubscript.toString(),dataSaveDays,timeUnit);
//            }
//        }else {
//            currentSubscript=Integer.parseInt(currentSubscriptStr);
//        }
//        return currentSubscript;
//    }
//
//    /**
//     *     * 获取上次更新的下标
//     *      * String workbookId="Obva6QBXJw6lYwAMFlr3arwxVn4qY5Pr";
//     *      * String sheetId="s1";
//     *      * @param rangeAddressKey
//     * @param workbookId
//     * @param sheetId
//     * @return
//     */
//    public JSONObject qwOptimizeTable(String workbookId,String sheetId,List<String>headerValues) {
//        SpreadSheetGetSheetPropertiesResponse spreadSheetGetSheetProperties = spreadSheetGetSheetProperties(workbookId);
//        String dateStr=sheetId;
//        Integer rowCount=1;
//        List<SpreadSheetGetSheetPropertiesItem>singleton= spreadSheetGetSheetProperties.getProperties().stream().filter(prp -> ObjectUtil.equal(prp.getTitle(), dateStr)).collect(Collectors.toList());
//        if(!singleton.isEmpty()){
//            sheetId=singleton.get(0).getSheetId();
//            rowCount=singleton.get(0).getRowCount();
//        }else{
//            shade.com.alibaba.fastjson2.JSONObject bsResult = batchUpdateSpreadsheet(workbookId, createAddSheetRequest(dateStr,600,10));
//            sheetId = bsResult.getJSONArray("responses").getJSONObject(0).getJSONObject("add_sheet_response").getJSONObject("properties").getString("sheet_id");
//            shade.com.alibaba.fastjson2.JSONObject updateRequest = batchUpdateSpreadsheet(workbookId,createUpdateSheetRequest(sheetId, 0, 0, Collections.singletonList(headerValues)));
//            rowCount=1;
//        }
//        JSONObject param = new JSONObject();
//        param.put("sheetId",sheetId);
//        param.put("rowCount",rowCount);
//        return param;
//    }
//
//    private void getDDSendOrderUpdates(WarehouseExpressDeliveryConfig param,List<List<String>>values,String sheetId,String rangeAddressTemplate,List<String>headerValues){
//        String workbookId = param.getWorkbookId();
//        String secret = param.getSecret();
//        String token = param.getToken();
//        String rangeAddressKey=String.format(keyTemplate,workbookId,sheetId);
//        Integer currentSubscript=ddOptimizeTable(rangeAddressKey,workbookId,sheetId,rangeAddressTemplate,headerValues);
//        ddImportValuesData(workbookId,sheetId,values,currentSubscript,rangeAddressKey,rangeAddressTemplate);
//        List<List<List<String>>> partitionValues = Lists.partition(values, 9);
//        for(int i=0;i<partitionValues.size();i++){
//            List<List<String>>pv=partitionValues.get(i);
//            String content="物流超过24小时未更新-测试阶段".concat("\n").concat(pv.stream().map(v->"订单编号："+v.get(0)+"\n"+"原始单号："+v.get(1)+ "\n"+"物流单号："+
//                    v.get(2)).collect(Collectors.joining("\n")));
//            if(i==partitionValues.size()-1){
//                content=content.concat("\n").concat(String.format(ddLinkUrl,workbookId));
//            }
//            DDUtil.sendMessageWebhook(secret,token,content);
//        }
//
//    }
//
//    private void getQwSendOrderUpdates(WarehouseExpressDeliveryConfig param,List<List<String>>values,String sheetId,List<String>headerValues){
//        String workbookId = param.getWorkbookId();
//        String secret = param.getSecret();
//        String token = param.getToken();
////        String rangeAddressKey=String.format(keyTemplate,workbookId,sheetId);
//        JSONObject qwotResult = qwOptimizeTable(workbookId, sheetId, headerValues);//企业微信
//        Integer currentSubscript=qwotResult.getInteger("rowCount");
//        sheetId=qwotResult.getString("sheetId");
//        qwImportValuesData(workbookId,sheetId,values,currentSubscript);
//        List<List<List<String>>> partitionValues = Lists.partition(values, 9);
//        for(int i=0;i<partitionValues.size();i++){
//            List<List<String>>pv=partitionValues.get(i);
//            String content="物流超过24小时未更新-测试阶段".concat("\n").concat(pv.stream().map(v->"订单编号："+v.get(0)+"\n"+"原始单号："+v.get(1)+ "\n"+"物流单号："+
//                    v.get(2)).collect(Collectors.joining("\n")));
//            if(i==partitionValues.size()-1){
//                content=content.concat("\n").concat(Objects.requireNonNull(getDocumentShareUrl(workbookId)));
//            }
//            WeChatUtil.sendTextMessage(secret,content,false);
//        }
//    }
//
//
//
//    private void getSendOrderUpdates(WarehouseExpressDeliveryConfig param,List<List<String>>values,String sheetId,String rangeAddressTemplate,List<String>headerValues){
//        Integer platform = param.getPlatform();
//        //平台 1钉钉 2企业微信
//        if (ObjectUtil.equal(platform,1)){
//            getDDSendOrderUpdates(param,values,sheetId,rangeAddressTemplate,headerValues);
//        }else {
//            getQwSendOrderUpdates(param,values,sheetId,headerValues);
//        }
//
//    }
//
//
//
//
//
//        /**
//         * 出库单列表转参数
//         * @param workbookId
//         * @param sheetId
//         * @param values
//         * @param currentSubscript
//         * @param rangeAddressKey
//         */
//    public void ddImportValuesData(String workbookId,String sheetId,List<List<String>>values,Integer currentSubscript,String rangeAddressKey,String rangeAddressTemplate){
//        int totalSize = values.size();
//        Integer startIndex=currentSubscript;
//        Integer endIndex=startIndex;
//        for (int start = 0; start < totalSize; start += updateBatchSize) {
//            int end = Math.min(start + updateBatchSize, totalSize);
//            List<List<String>>batchValues=values.subList(start, end);
//            startIndex=endIndex+1;
//            endIndex=startIndex+batchValues.size()-1;
//            String rangeAddress=String.format(rangeAddressTemplate,startIndex,endIndex);
//            DDUtil.updateRange(workbookId,sheetId,rangeAddress,batchValues);
//        }
//        redisService.setWithExpire(rangeAddressKey,endIndex.toString(),dataSaveDays,timeUnit);
//    }
//    /**
//     * 出库单列表转参数
//     * @param workbookId
//     * @param sheetId
//     * @param values
//     * @param currentSubscript
//     */
//    public void qwImportValuesData(String workbookId,String sheetId,List<List<String>>values,Integer currentSubscript){
////        int totalSize = values.size();
////        Integer startIndex=currentSubscript;
////        Integer endIndex=startIndex;
////        for (int start = 0; start < totalSize; start += updateBatchSize) {
////            int end = Math.min(start + updateBatchSize, totalSize);
////            List<List<String>>batchValues=values.subList(start, end);
////            startIndex=endIndex+1;
////            endIndex=startIndex+batchValues.size()-1;
////            String rangeAddress=String.format(rangeAddressTemplate,startIndex,endIndex);
////            DDUtil.updateRange(workbookId,sheetId,rangeAddress,batchValues);
////        }
//       WeChatUtil.batchUpdateSpreadsheetRecord(workbookId,sheetId,currentSubscript,values);
////
////        redisService.setWithExpire(rangeAddressKey,endIndex.toString(),dataSaveDays,timeUnit);
//    }
//}
